/*
 *  Copyright (C) 2011 glauco
 * 
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.balisunrise.common;

import java.io.Serializable;
import java.util.ArrayList;

/**
 * Interface basica dos eventos.
 *
 * @author glauco
 */
public interface Event extends Serializable{

    /**
     * Basic Criador do Evento.
     * @return criado do evento
     */
    public Basic getCreator();

    /**
     * Cada tipo de evento que cada basic pode gerar deve ter um nome.
     * @return Nome do Evento.
     */
    public String getName();

    /**
     * Arvore dos proprietários do Basic criador do evento.
     * O elemento do indice zero(0) é o criador do evento, o elemento do
     * indice um (1) é o owner do criador do evento.
     * @return Lista.
     */
    public ArrayList<Basic> getOwnersTree();

    /**
     * Adiciona a arvore dos proprietarios do Basic criador do evento.
     * @param owner um dos Basic da arquivo de proprietarios.
     */
    public void addOwner(Basic owner);

    /**
     * Nome padrão para evento padrão.
     * Utilizavel apenas quando não haver um nome especifíco para o evento.
     */
    public static final String EVENT = "Event";

    /**
     * Evento de seleção de linha do grid.
     */
    public static final String LINE_SELECTED_EVENT = "LineSelectedEvent";

    /**
     * Evento de seleção da última linha do grid.
     */
    public static final String LAST_LINE_SELECTED_EVENT =
            "LastLineSelectedEvent";

    /**
     * Evento de mudança de elemento da EntityList.
     */
    public static final String LIST_CHANGED_EVENT = "ListChangedEvent";

    /**
     * Evento de mudança do Mode da Transaction.
     */
    public static final String TRANSACTION_MODE_CHANGED_EVENT =
            "TransactionModeChangedEvent";

    /**
     * Evento Disparado pelo representação visual de um botão.
     */
    public static final String VISUAL_ACTION_EVENT = "VisualActionEvent";

    /**
     * Evento disparado por uma Transaction antes de validar uma entidade.
     */
    public static final String BEFORE_VALIDADE_EVENT = "BeforeValidadeEvent";

    /**
     * Evento disparado por uma Transaction antes de salvar uma entidade,
     * tanto em modo INSERT quanto em UPDATE.
     */
    public static final String BEFORE_SAVE_EVENT = "BeforeSaveEvent";

    /**
     * Evento disparado por uma Transaction depois de salvar uma entidade,
     * tanto em modo INSERT quanto em UPDATE.
     */
    public static final String AFTER_SAVE_EVENT = "AfterSaveEvent";

    /**
     * Evento disparado por uma Transaction antes de excluir uma entidade.
     */
    public static final String BEFORE_DELETE_EVENT = "BeforeDeleteEvent";

    /**
     * Evento disparado por uma Transaction depois de excluir uma entidade,
     */
    public static final String AFTER_DELETE_EVENT = "AfterDeleteEvent";

    /**
     * Evento disparado antes de executar a ação do botão de confirmação.
     */
    public static final String BEFORE_CONFIRM_EVENT = "BeforeConfirmEvent";

    /**
     * Evento dispado antes de executar a ação do botão de cancelamento.
     */
    public static final String BEFORE_CANCEL_EVENT = "BeforeCancelEvent";

    /**
     * Evento disparado depois de vincular os componentes a entidade.
     */
    public static final String AFTER_BIND_EVENT = "AfterBindEvent";

    /**
     * Evento disparado depois de desfazer o vinculo entre os componentes e a
     * entidade.
     */
    public static final String AFTER_UNBIND_EVENT = "AfterUnbindEvent";

    /**
     * Evento disparado de antes executar a carga de dados por um EntityLoader.
     */
    public static final String BEFORE_LOAD_EVENT = "BeforeLoadEvent";

    /**
     * Evento disparado antes de executar a iteração por um EntityLoader.
     */
    public static final String BEFORE_ITERATE_EVENT = "BeforeIterateEvent";

    /**
     * Evento disparado depois da carga de dados por um EntityLoader.
     */
    public static final String AFTER_LOAD_EVENT = "AfterLoadEvent";

    /**
     * Evento disparado quando uma coluna do grid é selecionada.
     */
    public static final String COLUMN_SELECTED_EVENT = "ColumnSelectedEvent";

    /**
     * Evento disparado quando a última coluna do grid é selecionada.
     */
    public static final String LAST_COLUMN_SELECTED_EVENT =
            "LastColumnSelectedEvent";

    /**
     * Evento disparado quando a última coluna editavel de um grid é
     * selecionada.
     */
    public static final String LAST_EDITABLE_COLUMN_SELECTED_EVENT =
            "LastEditableColumnSelectedEvent";

    /**
     * Evento de uma ação relacionada a um campo de uma entidade.
     */
    public static final String FIELD_ACTION_EVENT = "FieldActionEvent";

    /**
     * Evento da sincrinização do valor de um componente com um campo de uma
     * entidade.
     */
    public static final String SYNC_EVENT = "SyncEvent";

    /**
     * Evento de quando um componente recebe o focus.
     */
    public static final String GOT_FOCUS_EVENT = "GotFocusEvent";

    /**
     * Evento de quando um componente perde o focus.
     */
    public static final String LOST_FOCUS_EVENT = "LostFocusEvent";

    /**
     * Evento de quando o focus muda de componente e este este componente esta
     * entre o componente que perdeu o focus e o que ganhou o focus.
     * Este evento é disparado também quando o componente perde o focus, mas
     * não é disparado quando ganha o focus.
     */
    public static final String FOCUS_TRAVERSAL_EVENT = "FocusTraversalEvent";
}
